package com.librelato.util;

import java.io.File;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Properties;

import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.faces.context.FacesContext;
import javax.mail.Address;
import javax.mail.Message;
import javax.mail.Multipart;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;
import javax.servlet.http.HttpSession;

import com.librelato.bean.ChamadoBean;
import com.librelato.persistencia.config.PropriedadesDeConfiguracao;
import com.librelato.persistencia.config.PropriedadesDeConfiguracaoEnum;

public class Ferramentas {

	public static Date formataData(String dataFormatar, String formato) {

		SimpleDateFormat df = new SimpleDateFormat(formato);
		Date data = null;
		try {
			data = new Date(df.parse(dataFormatar).getTime());
			df = null;
		} catch (Exception e) {
			e.printStackTrace();
		}

		return data;

	}

	public static String formataData(long data, String formato) {

		SimpleDateFormat df = new SimpleDateFormat(formato);
		String dataFormatada = "";
		dataFormatada = df.format(new Date(data));
		return dataFormatada;
	}

	public static void enviaEmail(String corpoEmail, String assunto,
			String destino, String setorEmail) throws Exception {
		final String email;
		final String senha;
		if (destino != null && !"".equals(destino.trim())) {
			Properties props = new Properties();
			props.put("mail.smtp.host", "mail.librelato.com.br");
			props.put("mail.smtp.socketFactory.port", "25");
			props.put("mail.smtp.socketFactory.class",
					"javax.net.ssl.SSLSocketFactory");
			props.put("mail.smtp.auth", "true");
			props.put("mail.smtp.port", "25");

			if ("CHAMADO".equals(setorEmail)) {
				email = PropriedadesDeConfiguracao.getInstance()
						.getValorPropriedade(
								PropriedadesDeConfiguracaoEnum.EMAIL_CHAMADOS);
				senha = PropriedadesDeConfiguracao
						.getInstance()
						.getValorPropriedade(
								PropriedadesDeConfiguracaoEnum.SENHA_EMAIL_CHAMADOS);
			} else if ("COMPRAS".equals(setorEmail)) {
				email = PropriedadesDeConfiguracao.getInstance()
						.getValorPropriedade(
								PropriedadesDeConfiguracaoEnum.EMAIL_COMPRAS);
				senha = PropriedadesDeConfiguracao
						.getInstance()
						.getValorPropriedade(
								PropriedadesDeConfiguracaoEnum.SENHA_EMAIL_COMPRAS);
			} else {
				email = "";
				senha = "";
			}

			Session session = Session.getDefaultInstance(props,
					new javax.mail.Authenticator() {
						// E-mail Remetente
						@Override
						protected PasswordAuthentication getPasswordAuthentication() {
							return new PasswordAuthentication(email, senha);
						}
					});
			try {
				Message message = new MimeMessage(session);
				message.setFrom(new InternetAddress(email)); // Remetente
				Address[] toUser = null;
				toUser = InternetAddress.parse(destino.replace(";", ","));
				message.setRecipients(Message.RecipientType.TO, toUser);
				message.setSubject(assunto);// Assunto
				MimeBodyPart bodyMessage = new MimeBodyPart();
				bodyMessage.setContent(corpoEmail, "text/html; charset=UTF-8");
				Multipart mult = new MimeMultipart();
				mult.addBodyPart(bodyMessage);
				message.setContent(mult);
				message.saveChanges();
				Transport.send(message);
			} catch (Exception e) {
				throw e;
			}
		}
	}

	public static void enviaEmailPDF(String corpoEmail, String assunto,
			String destino, String setorEmail, File arquivo) throws Exception {
		final String email;
		final String senha;
		if (destino != null && !"".equals(destino.trim())) {
			Properties props = new Properties();
			props.put("mail.smtp.host", "mail.librelato.com.br");
			props.put("mail.smtp.socketFactory.port", "25");
			props.put("mail.smtp.socketFactory.class",
					"javax.net.ssl.SSLSocketFactory");
			props.put("mail.smtp.auth", "true");
			props.put("mail.smtp.port", "25");

			if ("CHAMADO".equals(setorEmail)) {
				email = PropriedadesDeConfiguracao.getInstance()
						.getValorPropriedade(
								PropriedadesDeConfiguracaoEnum.EMAIL_CHAMADOS);
				senha = PropriedadesDeConfiguracao
						.getInstance()
						.getValorPropriedade(
								PropriedadesDeConfiguracaoEnum.SENHA_EMAIL_CHAMADOS);
			} else if ("COMPRAS".equals(setorEmail)) {
				email = PropriedadesDeConfiguracao.getInstance()
						.getValorPropriedade(
								PropriedadesDeConfiguracaoEnum.EMAIL_COMPRAS);
				senha = PropriedadesDeConfiguracao
						.getInstance()
						.getValorPropriedade(
								PropriedadesDeConfiguracaoEnum.SENHA_EMAIL_COMPRAS);
			} else {
				email = "";
				senha = "";
			}

			Session session = Session.getDefaultInstance(props,
					new javax.mail.Authenticator() {
						// E-mail Remetente
						@Override
						protected PasswordAuthentication getPasswordAuthentication() {
							return new PasswordAuthentication(email, senha);
						}
					});
			try {
				Message message = new MimeMessage(session);
				message.setFrom(new InternetAddress(email)); // Remetente
				Address[] toUser = null;
				toUser = InternetAddress.parse(destino.replace(";", ","));
				message.setRecipients(Message.RecipientType.TO, toUser);
				message.setSubject(assunto);// Assunto
				MimeBodyPart bodyMessage = new MimeBodyPart();
				MimeBodyPart bodyAnexo = new MimeBodyPart();
				bodyMessage.setContent(corpoEmail, "text/html; charset=UTF-8");
				bodyAnexo.setDataHandler(new DataHandler(new FileDataSource(arquivo)));
				bodyAnexo.setFileName("Pedido.pdf");
				Multipart mult = new MimeMultipart();
				mult.addBodyPart(bodyAnexo);
				mult.addBodyPart(bodyMessage);
				message.setContent(mult);
				message.saveChanges();
				Transport.send(message);
			} catch (Exception e) {
				throw e;
			}
		}
	}
	
	public static String criaCorpoEmail(Object obj,String mensagemResponsavel) {

		ChamadoBean chamado = (ChamadoBean) obj;
		StringBuilder corpo = new StringBuilder();
		corpo.append("<!DOCTYPE html PUBLIC '-//W3C//DTD XHTML 1.0 Transitional//EN' 'http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd'>");
		corpo.append("<html xmlns='http://www.w3.org/1999/xhtml'>");
		corpo.append("<head>");
		corpo.append("<meta http-equiv='Content-Type' content='text/html; charset=utf-8' />");
		corpo.append("<title>Untitled Document</title>");
		corpo.append("</head>");
		corpo.append("<body>");
		corpo.append("<table width='606' border='0'>");
		corpo.append("<tr>");
		corpo.append("<th scope='col'><p>Chamados Librelato S.A.</p>");
		corpo.append("<p>_________________________________________________________________________</p></th>");
		corpo.append("</tr>");
		corpo.append("<tr>");
		corpo.append("<th scope='row'><p>&nbsp;</p>");
		corpo.append("<p>&nbsp;</p>");
		corpo.append("<p>Seu chamado recebeu uma interação. Acesse o portal de chamados para verificá-lo.</p>");
		corpo.append("<p>Nº Chamado: " + chamado.getCodigo() + "</p>");
		corpo.append("<p>&nbsp;</p>");
		if(!mensagemResponsavel.trim().equals("")) {
			corpo.append("<p>Observação: " + mensagemResponsavel + "</p>");	
		}
		corpo.append("<p>__________________________________________________________________________</p></th>");
		corpo.append("</tr>");
		corpo.append("<tr>");
		corpo.append("<th scope='row'><p>Mensagem automática do sistema. Favor não responder este e-mail</p></th>");
		corpo.append("</tr>");
		corpo.append("</table>");
		corpo.append("</body>");
		corpo.append("</html>");

		return corpo.toString();

	}
	
	public static String criaCorpoEmailInsatisfeitoParaGerencia(Object obj,String mensagemResponsavel) {

		ChamadoBean chamado = (ChamadoBean) obj;
		StringBuilder corpo = new StringBuilder();
		corpo.append("<!DOCTYPE html PUBLIC '-//W3C//DTD XHTML 1.0 Transitional//EN' 'http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd'>");
		corpo.append("<html xmlns='http://www.w3.org/1999/xhtml'>");
		corpo.append("<head>");
		corpo.append("<meta http-equiv='Content-Type' content='text/html; charset=utf-8' />");
		corpo.append("<title>Untitled Document</title>");
		corpo.append("</head>");
		corpo.append("<body>");
		corpo.append("<table width='606' border='0'>");
		corpo.append("<tr>");
		corpo.append("<th scope='col'><p>Chamados Librelato S.A.</p>");
		corpo.append("<p>_________________________________________________________________________</p></th>");
		corpo.append("</tr>");
		corpo.append("<tr>");
		corpo.append("<th scope='row'><p>&nbsp;</p>");
		corpo.append("<p>&nbsp;</p>");
		corpo.append("<p>Chamado Insatisfeito.</p>");
		corpo.append("<p>Nº Chamado: " + chamado.getCodigo() + "</p>");
		corpo.append("<p>Usuário: (" + chamado.getUsuario().getCodigo() + ")" + chamado.getUsuario().getNome().trim() + "</p>");
		corpo.append("<p>Responsável: (" + chamado.getUsuarioResponsavel().getCodigo() + ")" + chamado.getUsuarioResponsavel().getNome().trim() + "</p>");
		corpo.append("<p>Descrição Chamado: </p>");
		corpo.append("<p>");
		corpo.append(chamado.getDescricao());
		corpo.append("</p>");
		corpo.append("<p>&nbsp;</p>");
		if(!mensagemResponsavel.trim().equals("")) {
			corpo.append("<p>Histórico do Chamado: " + mensagemResponsavel + "</p>");	
		}
		corpo.append("<p>__________________________________________________________________________</p></th>");
		corpo.append("</tr>");
		corpo.append("<tr>");
		corpo.append("<th scope='row'><p>Mensagem automática do sistema. Favor não responder este e-mail</p></th>");
		corpo.append("</tr>");
		corpo.append("</table>");
		corpo.append("</body>");
		corpo.append("</html>");

		return corpo.toString();

	}

	public static String getDiretorioReal(String diretorio) {
		HttpSession session = (HttpSession) FacesContext.getCurrentInstance()
				.getExternalContext().getSession(false);
		return session.getServletContext().getRealPath(diretorio);
	}
}
